5.15. История Lua
История Lua
В начале 1990-х годов группа исследователей из Tecgraf (научно-техническая лаборатория факультета информатики Католического университета Рио-де-Жанейро, PUC-Rio) работала над проектами для Petrobras — крупнейшей бразильской нефтегазовой компании. Их задача заключалась в разработке программного обеспечения для проектирования и моделирования нефтяных месторождений, скважин и трубопроводов.
Эти приложения были мощными, но крайне жёсткими: любое изменение в поведении — например, добавление нового правила расчёта давления или настройка интерфейса — требовало перекомпиляции всей системы. Это замедляло разработку, увеличивало стоимость и делало невозможным адаптацию ПО под нужды конкретного заказчика.
Группе, возглавляемой Роберто Иерусалимским (Roberto Ierusalimschy), стало очевидно: нужно что-то, что позволит пользователям настраивать логику приложения без доступа к исходному коду. Они пробовали использовать существующие языки — Tcl, Python, даже собственные конфигурационные форматы, — но всё было либо слишком тяжёлым, либо плохо встраивалось, либо требовало лицензий. Тогда они приняли решение: создать свой язык.
В 1993 году команда — Роберто Иерусалимский, Луис Эдуардо де Фариа (Luiz Henrique de Figueiredo) и Вальтер Серрапо (Waldemar Celes) — представила первый релиз Lua (произносится «луа», что по-португальски значит «луна»). Имя было выбрано символически: как и луна, которая не светит сама, а отражает свет солнца, Lua не претендует на самостоятельность — он существует, чтобы облегчать жизнь другим системам, быть их «отражением», их внутренним скриптовым ядром.
Lua никогда не стремился быть универсальным языком. Он не пытается решать все задачи сразу — ни заменить Python, ни конкурировать с Java.
Его цель — одна: быть идеальным скриптовым языком для расширения приложений.
Эта философия выражена в самом дизайне:
- Нет встроенных библиотек для сетей, GUI или баз данных — всё это остаётся за пределами ядра.
- Нет классов — но есть таблицы и метатаблицы, позволяющие самому реализовать ООП.
- Нет строгой типизации — но есть гибкость и скорость прототипирования.
С самого начала Lua был открытым и свободным. В 1994 году он был выпущен под лицензией, аналогичной MIT, что позволило использовать его бесплатно в любых целях — включая коммерческие продукты. Это стало одной из причин его успеха: разработчики могли встраивать Lua в свои приложения без юридических рисков. Ни одна корпорация не «владеет» Lua — им продолжает заниматься исследовательская группа PUC-Rio, но сообщество вносит вклад в развитие, документацию и библиотеки.
Lua эволюционировал медленно:
- Lua 5.0 (2003) — введение метатаблиц, улучшенная система модулей, goto.
- Lua 5.1 (2006) — стабильная, самая распространённая версия. Используется в World of Warcraft, Nginx, многих движках.
- Lua 5.2 (2011) — новые области видимости (
goto,::label::), улучшения GC,__close metamethod. - Lua 5.3 (2015) — поддержка 64-битных целых чисел, улучшения производительности.
- Lua 5.4 (2020) — потоковая сборка мусора, множественные значения в параметрах, улучшения JIT-совместимости.
Каждое обновление сохраняло обратную совместимость, что критично для embedded-систем, где обновление может быть невозможно.
К 2010-м годам Lua стал популярным в игровой индустрии, особенно после успеха World of Warcraft, где весь пользовательский интерфейс управлялся Lua-скриптами. В этой популярной MMORPG видеоигре, использовались специальные «аддоны», модификации интерфейса, упрощающие жизнь игроку. Но настоящий скачок произошёл с ростом платформы Roblox — виртуального мира, где миллионы пользователей создают свои игры. Roblox выбрал Lua как основу для скриптования игровой логики, но столкнулся с ограничениями - динамическая типизация, отсутствие строгой проверки типов и медленная разработка больших проектов.
В ответ на это, инженеры Roblox разработали Luau — диалект Lua, совместимый с Lua 5.1, но с важными улучшениями - статическая типизация, type inference, nullable-типы, обобщения, улучшенный анализ кода и оптимизированную производительность.
Сегодня Luau — один из самых массовых языков программирования в мире, ведь десятки миллионов детей и подростков учатся программировать на нём в Roblox Studio.